//package work.rightAnswer;
//
//
//import work.TreeNode;
//
//class Solution_222 {
//    public int countNodes(TreeNode root) {
//        if(root==null){
//            return 0;
//        }
//
//
//        int leftHeight = mostLeftHeight(root, 0);
//        return compTreeNum(root,0,leftHeight);
//    }
//
//    //完全二叉树root的节点个数
//    private int compTreeNum(TreeNode root, int level, int leftHeight) {
//        if(root.left==null&&root.right==null){
//            return 1;
//        }
//        //二分法：先找到右子树的最左节点
//        int rightLeftHeight = mostLeftHeight(root.right, level + 1);
//        //1.如果右子树最左节点的层数为leftHeight，那么可以判断左子树为满二叉树 节点个数为2的（leftHeight-level）次方-1，右子树为完全二叉树
//        if(rightLeftHeight==leftHeight){
//            return (int) Math.pow(2,leftHeight-level)+compTreeNum(root.right,level+1,leftHeight);
//        }else {
//            //2.如果右子树最左节点不为leftHeight，右子树节点个数为2的（leftHeight-level）-1次方-1，左子树为完全二叉树
//            return (int) Math.pow(2,leftHeight-level-1)+compTreeNum(root.left,level+1,leftHeight);
//        }
//
//    }
//
//    public int mostLeftHeight(TreeNode node,int level){
//        while (node!=null){
//            level++;
//            node = node.left;
//        }
//        return level-1;
//    }
//}